diff --git a/astropy/coordinates/earth.py b/astropy/coordinates/earth.py
index bf8de3ebd6..207759ee29 100644
--- a/astropy/coordinates/earth.py
+++ b/astropy/coordinates/earth.py
@@ -655,7 +655,7 @@ class EarthLocation(u.Quantity):
         """Convert to a tuple with X, Y, and Z as quantities."""
         return (self.x, self.y, self.z)
 
-    def get_itrs(self, obstime=None):
+    def get_itrs(self, obstime=None, location=None):
         """
         Generates an `~astropy.coordinates.ITRS` object with the location of
         this object at the requested ``obstime``.
@@ -665,6 +665,9 @@ class EarthLocation(u.Quantity):
         obstime : `~astropy.time.Time` or None
             The ``obstime`` to apply to the new `~astropy.coordinates.ITRS`, or
             if None, the default ``obstime`` will be used.
+        location : `~astropy.coordinates.EarthLocation` or None
+            If provided, calculate the topocentric ITRS frame at this location,
+            otherwise, calculate the geocentric ITRS frame.
 
         Returns
         -------
@@ -679,7 +682,15 @@ class EarthLocation(u.Quantity):
         # do this here to prevent a series of complicated circular imports
         from .builtin_frames import ITRS
 
-        return ITRS(x=self.x, y=self.y, z=self.z, obstime=obstime)
+        if location is not None:
+            # Calculate topocentric ITRS frame
+            itrs_cart = self.to_geocentric().represent_as(CartesianRepresentation)
+            location_cart = location.to_geocentric().represent_as(CartesianRepresentation)
+            topocentric_cart = itrs_cart - location_cart
+            return ITRS(topocentric_cart, obstime=obstime)
+        else:
+            # Calculate geocentric ITRS frame
+            return ITRS(x=self.x, y=self.y, z=self.z, obstime=obstime)
 
     itrs = property(
         get_itrs,
